home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Night Owl 6
/
Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso
/
039a
/
oopbas.zip
/
OOPBASE.C
next >
Wrap
Text File
|
1991-08-22
|
7KB
|
221 lines
/************************************************************************
oopbase.c
Provided by
Silico-Magnetic Intelligence
914 426-2610 FAX: 914 426-3152
OOP Database demonstration program
The following program shows the call sequence to
the OOP Database Library routines.
************************************************************************/
/************************************************************************
+ Unit Test Segment
************************************************************************/
#include <stdio.h>
#define Test_limit 100L
#define KEY_STOP
#define Test_message_1 "Better-C manages complexity."
#define Test_message_2 "Better-C doubles productivity!"
#define Create_bases "Creating two databases...."
#define Inserting_records "Adding %ld records to each database...."
#define Traverse_ascending "\nTraverse database object %d in ascending order..."
#define Traverse_descending "\nTraverse database object %d in descending order..."
#define Deleting_records "\nDeleting records from %d to %d from each database...."
#define Reinserting_records "\nReinserting records from %d to %d into each database...."
#define Access_records "\nAccess records randomly from %d to %d by %d in each database...."
#define true 1
#define false 0
#define Line_len 81
#define Line_feed printf("\n");
#define Clear_screen system ("cls")
#define Test_result "\n\nObject handle: %d. Object numeric value: %d.\n\nObject message: %s\n"
#define Not_found "Record not found."
#define File_1 "bctest1.db"
#define File_2 "bctest2.db"
#define Change_start 5
#define Change_end 20
#define Change_gap 2
#define Key_pattern_1 "DB %d %5d: this is the KEY part"
#define Key_pattern_2 "DB %d %5d: KEY string"
#define Record_pattern "\n>%s|||%s<"
#define Data_pattern_1 "DATA part %d...."
#define Data_pattern_2 "DATA string %d ----"
#define Base_header_1 "Better-C database sample 1 "
#define Base_header_2 "Better-C database sample 2 "
void db_key_stop()
{
#ifdef KEY_STOP
getchar();
#endif
}
void db_test();
void db_traverse_ascending(int);
void db_traverse_descending(int);
void main() { db_test(); }
void db_test()
/*----------------------------------------------------------------------
Title: Test database module by operating on two database objects
-----------------------------------------------------------------------*/
{
int handle_1, handle_2;
char key[ Line_len ], data[ Line_len];
long i;
Clear_screen;
handle_start(); /* object handle init */
db_start(); /* database init */
printf(Create_bases); Line_feed;
db_create( File_1, Base_header_1);
db_create( File_2, Base_header_2);
printf (Inserting_records, Test_limit);
db_key_stop();
handle_1 = db_open( File_1 );
handle_2 = db_open( File_2 );
for (i = 0L; i < Test_limit; i++)
{
sprintf(key, Key_pattern_1, handle_1, i);
sprintf(data, Data_pattern_1, 2 * i);
db_insert( handle_1, key, data);
sprintf(key, Key_pattern_2, handle_2, i);
sprintf(data, Data_pattern_2, 3 * i);
db_insert( handle_2, key, data);
}
db_traverse_ascending(handle_1);
db_traverse_ascending(handle_2);
printf(Deleting_records, Change_start, Change_end);
Line_feed; db_key_stop();
for (i = Change_start; i <= Change_end; i++)
{
sprintf(key, Key_pattern_1, handle_1, i);
db_delete(handle_1, key);
sprintf(key, Key_pattern_2, handle_2, i);
db_delete(handle_2, key);
}
db_traverse_ascending(handle_1);
db_traverse_ascending(handle_2);
printf(Reinserting_records, Change_start, Change_end);
Line_feed; db_key_stop();
for (i = Change_start; i <= Change_end; i++)
{
sprintf(key, Key_pattern_1, handle_1, i);
sprintf(data, Data_pattern_1, 2 * i);
db_insert( handle_1, key, data);
sprintf(key, Key_pattern_2, handle_2, i);
sprintf(data, Data_pattern_2, 3 * i);
db_insert( handle_2, key, data);
}
db_traverse_ascending(handle_1);
db_traverse_ascending(handle_2);
db_traverse_descending(handle_1);
db_traverse_descending(handle_2);
db_close(handle_1);
db_close(handle_2);
handle_1 = db_open( File_1 );
handle_2 = db_open( File_2 );
printf(Access_records, Change_start, Change_end, Change_gap);
Line_feed; db_key_stop();
for (i = Change_start; i <= Change_end; i += Change_gap)
{
sprintf(key, Key_pattern_1, handle_1, i);
if ( ( db_read_key( handle_1, key, data)) == true)
printf(Record_pattern, key, data);
else
printf( Not_found);
sprintf(key, Key_pattern_2, handle_2, i);
if ( ( db_read_key( handle_2, key, data)) == true)
printf(Record_pattern, key, data);
else
printf( Not_found);
}
Line_feed;
printf(Access_records, Change_end, Change_start, Change_gap);
Line_feed; db_key_stop();
for (i = Change_end; i >= Change_start; i -= Change_gap)
{
sprintf(key, Key_pattern_1, handle_1, i);
if ( ( db_read_key( handle_1, key, data)) == true)
printf(Record_pattern, key, data);
else
printf( Not_found);
sprintf(key, Key_pattern_2, handle_2, i);
if ( ( db_read_key( handle_2, key, data)) == true)
printf(Record_pattern, key, data);
else
printf( Not_found);
}
db_close(handle_1);
db_close(handle_2);
db_end(); /* deinit database */
handle_end(); /* deinit object handle */
Line_feed; db_key_stop();
Clear_screen;
}
void db_traverse_ascending(int handle)
/*----------------------------------------------------------------------
Title: Traverse and print database in ascending order
-----------------------------------------------------------------------*/
{
char key[ Line_len ], data[ Line_len];
printf(Traverse_ascending, handle);
Line_feed; db_key_stop();
db_go_to_first(handle);
while (db_read_next(handle, key, data) == true)
printf(Record_pattern, key, data);
Line_feed;
}
void db_traverse_descending(int handle)
/*----------------------------------------------------------------------
Title: Traverse and print database in descending order
-----------------------------------------------------------------------*/
{
char key[ Line_len ], data[ Line_len];
printf(Traverse_descending, handle);
Line_feed; db_key_stop();
db_go_to_last(handle);
while (db_read_previous(handle, key, data) == true)
printf(Record_pattern, key, data);
Line_feed;
}
/************************************************************************
End of Unit Test Segment
************************************************************************/
/************************************************************************
End of: Object-oriented module algorithms
************************************************************************/